package com.lynn.common.utils.file;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileUtil {
    private final String TAG = this.getClass().getName();

    /**
     * 获取给定文件中所有文件的大小
     *
     * @param file 指定的文件
     * @return bytes
     */
    public static long getFilesSize(File file) {
        if (file == null) return 0;
        long size = 0;
        try {
            File[] fileList = file.listFiles();
            for (File aFileList : fileList) {
                // 如果下面还有文件
                if (aFileList.isDirectory()) {
                    size = size + getFilesSize(aFileList);
                } else {
                    size = size + aFileList.length();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return size;
    }


    /**
     * 输入流写入文件
     * @param inputStream 输入流
     * @param file 目标文件
     */
    public void write(InputStream inputStream, File file) {
        if (file.exists()) {
            boolean delete = file.delete();
        }

        try {
            FileOutputStream fos = new FileOutputStream(file);
            byte[] byteArray = new byte[1024];
            int len = inputStream.read(byteArray);
            while (len != -1) {
                fos.write(byteArray, 0, len);
                len = inputStream.read(byteArray);
            }

            inputStream.close();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    /**
     * 创建文件
     * @return
     */
    public static boolean createNewFile(String filePath){
        File f = new File(filePath);
        try {
            return f.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }




    /**
     * 删除文件
     * 如果是文件，直接删除
     * 如果是文件目录，则删除其下的所有子文件
     */
    public static boolean deleteFile(File file) {
        if (file == null) return true;
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File f : files) {
                boolean result =  deleteFile(f);
                if (!result){
                    return  false;
                }
            }
            return true;
        } else {
            return file.delete();
        }
    }




}
